package com.opennews.openplatform.familyexpenseapi.dto.income.expense.detail

import com.opennews.openplatform.myspringbootcore.dto.IdentityDto
import jakarta.validation.constraints.NotBlank
import jakarta.validation.constraints.NotNull
import jakarta.validation.constraints.Size
import java.math.BigDecimal
import java.time.LocalDateTime

abstract class BaseIncomeExpenseDetailDto {
    var bankCard: IdentityDto? = null

    @field:NotNull(message = "amount can't be null")
    lateinit var amount: BigDecimal

    /** IncomeExpenseTypeConstant */
    @field:NotBlank(message = "type can't be blank")
    lateinit var type: String

    /** IncomeTypeConstant, ExpenseTypeConstant */
    @field:NotBlank(message = "detailType can't be blank")
    lateinit var detailType: String

    /** PaymentTypeConstant */
    @field:NotBlank(message = "paymentType can't be blank")
    lateinit var paymentType: String

    @field:NotBlank(message = "details can't be blank")
    @field:Size(max = 100, message = "details must be at most 100 characters")
    lateinit var details: String

    @field:Size(max = 100, message = "remark must be at most 100 characters")
    var remark: String? = null

    @field:NotNull(message = "incomeExpenseDate can't be null")
    lateinit var incomeExpenseDate: LocalDateTime

    /** 坐标纬度，GCJ02火星坐标系。 */
    var latitude: BigDecimal? = null

    /** 坐标经度，GCJ02火星坐标系。 */
    var longitude: BigDecimal? = null

    /** 根据经纬度从地图API获取的地址信息，由逗号间隔，如中国,浙江省,杭州市,萧山区,北干街道。 */
    var address: String? = null

    /** 根据经纬度从地图API获取的格式化后的地址信息，如浙江省杭州市萧山区北干街道博奥路。 */
    var formattedAddress: String? = null

    /** 根据经纬度从地图API获取的坐标点所在省名称，例如：北京市。 */
    var province: String? = null

    /** 根据经纬度从地图API获取的坐标点所在城市名称，请注意：当城市是省直辖县时返回为空，以及城市为北京、上海、天津、重庆四个直辖市时，该字段返回为空。 */
    var city: String? = null

    /** 根据经纬度从地图API获取的坐标点所在区，例如：海淀区。 */
    var district: String? = null
}